/**
 * Classe de gestion d'un joueur
 * @author Lo�c Mounier, Thomas Picard, Marianne Grandemenge
 */

package modele;

import java.io.IOException;
import java.io.Serializable;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;

import codebase.IJoueur;

public class Joueur extends UnicastRemoteObject implements Serializable, IJoueur {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private double id;
	private String nom;
	private ArrayList<Puissance> listPuissance;
	private boolean serveur;
	private InetAddress adr;
	private int port;

	public Joueur(String n, boolean server, String adresse, int port) throws RemoteException {
		id = Math.random() * 1000000000;
		nom = n;
		this.port = port;
		this.serveur = server;
		this.listPuissance = new ArrayList<Puissance>();
		try {
			adr = InetAddress.getByName(adresse);
		} catch (UnknownHostException e) {
			System.out.println("Erreur dans l'adresse serveur");
		}
	}

	public double getId() throws RemoteException {
		return id;
	}

	@Override
	public String getNom() throws RemoteException {
		return nom;
	}

	public void setNom(String n) throws RemoteException {
		nom = n;
	}

	public InetAddress getAdr() {
		return adr;
	}

	public void setAdr(InetAddress adr) {
		this.adr = adr;
	}

	public int getPort() {
		return port;
	}

	public void setPort(int port) {
		this.port = port;
	}

	public ArrayList<Puissance> getListPuissance() throws RemoteException {
		return listPuissance;
	}

	public void setListPuissance(ArrayList<Puissance> p) throws RemoteException {
		listPuissance = p;
	}

	public void addPuissance(Puissance p) throws RemoteException {
		if (!listPuissance.contains(p)) {
			listPuissance.add(p);
		}
	}

	public void clearPuissance() throws RemoteException {
		listPuissance.clear();
	}

	public boolean isServeur() {
		return serveur;
	}

	@Deprecated
	public void sendMessage(String s) {
		s = this.nom + " : " + s;
		DatagramPacket packet = new DatagramPacket(s.getBytes(), s.length(), adr, port);
		packet.setData(s.getBytes());

		// Envoi de ce packet
		try {
			Partie.castSocket.send(packet);
		} catch (IOException e) {
			System.out.println("Erreur envoi message");
			e.printStackTrace();
		}
		packet = new DatagramPacket(s.getBytes(), s.length(), adr, port);
	}

	public String toString() {
		return nom;
	}

	@Override
	public void receiveMessage(String msg, String tabName, ArrayList<String> listeJoueursChat)
			throws RemoteException {

		client.vue.Jeu.refresh(msg, tabName, listeJoueursChat);
	}

	@Override
	public int getScore() {
		int score = 0;

		for (Puissance puissance : listPuissance) {
			score += puissance.getScore();
		}
		return score;
	}
}
